package com.maiko.maikoaiagent.tools;

import cn.hutool.core.io.FileUtil;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.maiko.maikoaiagent.constant.FileConstant;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

import java.io.IOException;

/**
 * PDFGenerationTool 是一个 PDF 文件生成工具类，
 * 基于 iText7 库，将传入的文本内容写入指定名称的 PDF 文件中，并保存到本地。
 *
 * 支持中文字符，默认使用内置字体 STSongStd-Light（兼容简体中文）。
 *
 * 示例用法：
 * PDFGenerationTool tool = new PDFGenerationTool();
 * tool.generatePDF("example.pdf", "你好，世界！");
 *
 * 文件保存路径默认为 {@code FileConstant.FILE_SAVE_DIR + "/pdf"} 目录下。
 *
 * 依赖库：
 * - iText7（https://itextpdf.com/）
 * - Hutool（用于目录创建）
 *
 * 字体提示：
 * - 如需使用自定义字体（如宋体），请将字体文件（如 simsun.ttf）放入项目资源路径中，并启用相关注释代码。
 *
 * @author Maiko7
 * @create 2025-07-09 15:22
 */
public class PDFGenerationTool {

    /**
     * 生成一个包含指定内容的 PDF 文件，并保存为指定文件名。
     *
     * @param fileName 生成的 PDF 文件名（如 report.pdf）
     * @param content  要写入 PDF 的文本内容
     * @return 成功时返回文件路径提示，失败时返回错误信息
     */
    @Tool(description = "Generate a PDF file with given content")
    public String generatePDF(
            @ToolParam(description = "Name of the file to save the generated PDF") String fileName,
            @ToolParam(description = "Content to be included in the PDF") String content) {

        // 构建保存目录和文件路径
        String fileDir = FileConstant.FILE_SAVE_DIR + "/pdf";
        String filePath = fileDir + "/" + fileName;

        try {
            // 确保目录存在
            FileUtil.mkdir(fileDir);

            // 使用 iText7 创建 PDFWriter、PdfDocument、Document
            try (PdfWriter writer = new PdfWriter(filePath);
                 PdfDocument pdf = new PdfDocument(writer);
                 Document document = new Document(pdf)) {

                // 设置中文字体：使用内置的 STSongStd-Light 字体支持中文
                PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H");
                document.setFont(font);

                // 构建段落并添加到 PDF 中
                Paragraph paragraph = new Paragraph(content);
                document.add(paragraph);
            }

            return "PDF generated successfully to: " + filePath;

        } catch (IOException e) {
            // 处理异常
            return "Error generating PDF: " + e.getMessage();
        }
    }
}


